//---------------
#include "Model.h"
#include <iostream>
//---------------
using namespace std;
//---------------
Model::Model(Animacion anim[], Textura tex [])
{
	for(int i = 0; i< /* long array */ ; i++) //usando iteradores recorro el array
	{
		if(!MPA[anim[i].getName()])//pregunto si existe la animacion en el mapa
		{
			//creo un pair de animacion e int y lo agrego al mapa
			pair<Animation,int> apair; 
			apair.first = anim[i];
			apair.second = 1;
			MPA[anim[i].getName()] = apair;
			CantAnim++;//sumo al contador de report
		}
		else MPA[anim[i].getName()].second++; //sumo el contador de animacion
	}
	for(int i = 0; i</* long array */ ; i++)  //usando iteradores recorro el array
	{
		if(!MPT[tex[i].getName()])//pregunto si existe la textura en el mapa
		{
			//creo un pair de textura e int y lo agrego al mapa
			pair<Textura,int> tpair;
			tpair.first = tex[i];
			tpair.second = 1;
			MPT[tex[i].getName()] = tpair;
			CantTex++;//sumo al contador de report
		}
		else MPT[tex[i].getName()].second++; //sumo el contador de textura
	}
}

void* Model::operator new(size_t _size, Animacion anim[], Textura tex[])
{
	Model* m = malloc(_size); //pido memoria para model
	MPM[CantModel] = m; //agrego al mapa de modelos
	CantModel++; //sumo un modelo al contador
	//pregunto si hay animaciones y/o texturas, en el caso de ser negativa deberia llamar a una exception
	//try
	//{
	//anim[0] == NULL;
	//tex[0] == NULL;
	//}
	m->Model(anim,tex); //llamo al constructor de Model
	return m;
}

void Model::createAnimation(Animacion anim)
{
	if(!MPA[anim.getName()])//pregunto si existe la animacion en el mapa
	{
		//creo un pair de animacion e int y lo agrego al mapa
		pair<Animation,int> apair; 
		apair.first = anim;
		apair.second = 1;
		MPA[anim.getName()] = apair;
		CantAnim++;//sumo al contador de report
	}
	else MPA[anim.getName()].second++; //sumo el contador de animacion
}

void Model::createTexture(Textura tex)
{
	if(!MPT[tex.getName()])//pregunto si existe la textura en el mapa
	{
		//creo un pair de textura e int y lo agrego al mapa
		pair<Textura,int> tpair;
		tpair.first = tex;
		tpair.second = 1;
		MPT[tex.getName()] = tpair;
		CantTex++;//sumo al contador de report
	}
	else MPT[tex.getName()].second++; //sumo el contador de textura
}

bool Model::deleteAnimation(Animacion anim)
{
	if(MPA[anim.getName()])//pregunto si existe la animacion en el mapa
	{
		if(MPA[anim.getName()].second =< 1)//pregunto cuantas animaciones hay
		{
			CantAnim--; //resto el contador de report
			MPA.erase(anim); //elimino la animacion del mapa
		}
		else MPA[anim.getName()].second--; //resto el contador
	}
	else cout << "la animacion no existe" <<endl;
}

bool Model::deleteTexture(Textura tex)
{
	if(MPA[tex.getName()])//pregunto si existe la textura en el mapa
	{
		if(MPA[tex.getName()].second =< 1)//pregunto cuantas texturas hay
		{
			CantTex--;//resto el contador de report
			MPA.erase(tex); //elimino la textura del mapa
		}
		else MPA[tex.getName()].second--; //resto el contador
	}
	else cout << "la textura no existe" <<endl;
}

void Model::reportar()
{
	getReport(); //reporto
}
//---------------